/*	--- 构建流程 --- 


#	构建流程

Maven不但有标准化的项目结构，而且还有一套标准化的构建流程，可以自动化实现编译，打包，发布，等等。


---------------------------


#	Lifecycle(生命周期)和Phase(阶段)

使用Maven时，我们首先要了解什么是Maven的生命周期（lifecycle）。

Maven的生命周期由一系列阶段（phase）构成，以内置的生命周期default为例，它包含以下phase：

	validate
	initialize
	generate-sources
	process-sources
	generate-resources
	process-resources
	compile
	process-classes
	generate-test-sources
	process-test-sources
	generate-test-resources
	process-test-resources
	test-compile
	process-test-classes
	test
	prepare-package
	package
	pre-integration-test
	integration-test
	post-integration-test
	verify
	install
	deploy

------------------------------


如果我们运行mvn package，Maven就会执行default生命周期，它会从开始一直运行到package这个phase为止：

	validate
	...
	package


---------------------------


如果我们运行mvn compile，Maven也会执行default生命周期，但这次它只会运行到compile，即以下几个phase：

	validate
	...
	compile


-----------------------------


Maven另一个常用的生命周期是clean，它会执行3个phase：

	pre-clean
	clean （注意这个clean不是lifecycle而是phase）
	post-clean


所以，我们使用mvn这个命令时，后面的参数是phase，Maven自动根据生命周期运行到指定的phase。


-------------------------------


更复杂的例子是指定多个phase，例如，运行mvn clean package，Maven先执行clean生命周期并运行到clean这个phase，然后执行default生命周期并运行到package这个phase，实际执行的phase如下：

	pre-clean
	clean （注意这个clean是phase）
	validate
	...
	package


-------------------------------


在实际开发过程中，经常使用的命令有：


	mvn clean：清理所有生成的class和jar；

	mvn clean compile：先清理，再执行到compile；

	mvn clean test：先清理，再执行到test，因为执行test前必须执行compile，所以这里不必指定compile；

	mvn clean package：先清理，再执行到package。


----------------------------------


大多数phase在执行过程中，因为我们通常没有在pom.xml中配置相关的设置，所以这些phase什么事情都不做。

经常用到的phase其实只有几个：

	· clean：清理
	· compile：编译
	· test：运行测试
	· package：打包


--------------------------------------


#	Goal(即class中的method)

执行一个phase又会触发1个/多个goal：

执行的Phase		对应执行的Goal
---------------------------------
compile			compiler:compile
test			compiler:testCompile
				surefile:test


goal的命名总是abc:xyz这种形式。


===================================


看到这里，相信大家对lifecycle、phase和goal已经明白了吧？


其实我们类比一下就明白了：

	· lifecycle相当于Java的package，它包含1个/多个phase；

	· phase相当于Java的class，它包含一个或多个goal；

	· goal相当于class的method，它其实才是真正干活的。


-----------------------------------

大多数情况，我们只要指定phase，就默认执行这些phase默认绑定的goal，只有少数情况，我们可以直接指定运行一个goal。

例如，启动Tomcat服务器：

	mvn tomcat:run




======================================================*/




/*	----- 构建流程 の 小结 ----- 

1. Maven通过lifecycle、phase和goal来提供标准的构建流程。


2. 最常用的构建命令是指定phase，然后让Maven执行到指定的phase：

	· mvn clean
	· mvn clean compile
	· mvn clean test
	· mvn clean package


3. 通常情况,我们总是执行phase默认绑定的goal,因此不必指定goal。



*/

